package E_2024;

import java.util.LinkedList;

/*
已知火星人使用的运算符为#、$，其与地球人的等价公式如下：

x#y = 2*x+3*y+4

x$y = 3*x+y+2

1、其中x、y是无符号整数

2、地球人公式按C语言规则计算

3、火星人公式中，$的优先级高于#，相同的运算符，按从左到右的顺序计算

现有一段火星人的字符串报文，请你来翻译并计算结果。

输入描述

火星人字符串表达式（结尾不带回车换行）

输入的字符串说明：字符串为仅由无符号整数和操作符（#、$）组成的计算表达式。

例如：123#4$5#67$78。

用例保证字符串中，操作数与操作符之间没有任何分隔符。
用例保证操作数取值范围为32位无符号整数。
保证输入以及计算结果不会出现整型溢出。
保证输入的字符串为合法的求值报文，例如：123#4$5#67$78
保证不会出现非法的求值报文，例如类似这样字符串：
#4$5 //缺少操作数

4$5# //缺少操作数

4#$5 //缺少操作数

4 $5
 */
public class E_100_31 {
    public static void main(String[] args) {
        System.out.println(ans("123#4$5#67$78"));
    }
    public static int ans(String str){
        int left = 0;
        boolean tu = false;
        LinkedList<Integer> list = new LinkedList<>();
        for (int i = 0; i < str.length(); i++) {
            char ch = str.charAt(i);
            if (ch >= '0' && ch <= '9') continue;
            else {
                list.addLast(Integer.valueOf(str.substring(left,i)));
                if (tu){
                    Integer y = list.pollLast();
                    Integer x = list.pollLast();
                    list.addLast(3*x+y+2);
                    tu = false;
                }
                if (ch == '$') tu = true;
                left = i + 1;
            }
        }
        while(list.size() > 1){
            Integer x = list.pollFirst();
            Integer y = list.pollFirst();
            list.addFirst(2*x+3*y+4);
        }
        return list.poll();
    }
}
